#include "./BSP/UART/uart.h"
#include "./BSP/LEDC/ledc.h"

void uart_callback(void *arg){
    uint16_t len = 0;
    ledc_config_t *ledc_config = malloc(sizeof(ledc_config_t));
    
    ledc_config->clk_cfg         = LEDC_AUTO_CLK;           /* 启动定时器时，根据给出的分辨率和占空率参数自动选择ledc源时钟 */
    ledc_config->timer_num       = LEDC_TIMER_0;            /* 选择哪个定时器计数（LEDC_TIMER_0~LEDC_TIMER_3） */
    ledc_config->freq_hz         = 1000;                    /* 1KHz（系统自动计算分配系数，并提供freq_hz频率给到定时器） */
    ledc_config->duty_resolution = LEDC_TIMER_14_BIT;       /* 设置定时器最大计数值（请看技术手册表32.4.1） */
    ledc_config->channel         = LEDC_CHANNEL_0;          /* 设置输出通道（LEDC_CHANNEL_0 ~ LEDC_CHANNEL_7） */
    ledc_config->duty            = 0;                       /* 一个周期内占高电平时间(占空比) */
    ledc_config->gpio_num        = LEDC_PWM_CH0_GPIO;       /* PWM信号输出那个管脚 */
    ledc_init(ledc_config);
    
    uart0_init(115200);             /* 初始化串口0 */

    char data[10] = {0};
    char *a = "1";
    char *b = "2";
    ledc_pwm_set_duty(ledc_config,0);

    while(1)
    {
        uart_get_buffered_data_len(USART_UX, (size_t*) &len);

        if (len > 0)
        {
            uart_read_bytes(USART_UX, data, len, 100);
            data[len] = '\0';

            if (strcmp(a, data) == 0)
            {
                uart_write_bytes(USART_UX, "LED OFF\n", 8);
                ledc_pwm_set_duty(ledc_config, 0);
            }
            else if (strcmp(b, data) == 0)
            {
                uart_write_bytes(USART_UX, "LED ON\n", 7);
                ledc_pwm_set_duty(ledc_config, 80);
            }

            memset(data, 0, 10);
        }

        vTaskDelay(pdMS_TO_TICKS(10));    /* 延时10ms */
    }
}